.. _cmlMxStopEmg: cmlMxStopEmg ================================ -------------------------------- SYNOPSYS ````````````` .. code-block:: none VT_I4 cmlMxStopEmg ([in] VT_I4 BoardID, [in] VT_I4 NumAxes, [in] VT_PI4 NumChannel) DESCRIPTION ````````````` - ì§€ì •í•œ ëª¨ë“ ì¶•ì— ëŒ€í•œ ëª¨ì…˜ì„ ì •ì§€(åœæ¢)합니다. cmlMxStop() 함수는 ì •ì§€(åœæ¢)ì‹œì— ê°ì† 후 ì •ì§€(åœæ¢)를 수행하며, cmlMxStopEmg() 함수는 ê°ì†ì—†ì´ ì¦‰ì‹œì •ì§€(åœæ¢)를 수행합니다. \ - ì´ í•¨ìˆ˜ì˜ ì‚¬ìš©ê³¼ í˜¸ì¶œì— ìžˆì–´, ì œê³µëœ ãˆœì»¤ë¯¸ì¡°ì•„ì˜ í•¨ìˆ˜ í—¤ë” Visual Basic ì—서는 í•¨ìˆ˜ì˜ ì²¨ë‘ì–´ cml ê°€ 붙지 않습니다. PARAMETER ````````````` â–¶ BoardID : 사용ìžê°€ ì„¤ì •í•œ 디바ì´ìŠ¤(ë³´ë“œ) ID. â–¶ NumAxes : ë™ì‹œì— ìž‘ì—…ì„ ìˆ˜í–‰í• ëŒ€ìƒ ì¶•ì˜ ìˆ˜ â–¶ NumChannel : ë™ì‹œì— ìž‘ì—…ì„ ìˆ˜í–‰í• ëŒ€ìƒ ì¶•ì˜ ë°°ì—´ 주소값. ì´ ë°°ì—´ì˜ í¬ê¸°ëŠ” NumAxesê°’ê³¼ ì¼ì¹˜í•˜ê±°ë‚˜ 커야 합니다. RETURN VALUE ````````````` +------------+-----------+ | Value | Meaning | +============+===========+ | ìŒìˆ˜ | 수행 실패 | +------------+-----------+ | ERR_NONE | 수행 성공 | +------------+-----------+ REFERENCE ````````````` .. note:: "윈ë„ìš° ì´ë²¤íŠ¸ë¼ëŠ” ê²ƒì€ ë¬´ì—‡ìž…ë‹ˆê¹Œ?" 윈ë„ìš° ìš´ì˜ì²´ì œëŠ” Event Driven í˜¹ì€ Message Driven ë°©ì‹ì˜ 구조로 ë˜ì–´ 있습니다. ê° ì‘ìš©í”„ë¡œê·¸ëž¨ì€ ë©”ì‹œì§€ í(Queue)를 ê°€ì§€ê³ ìžˆìœ¼ë©°, ì •í™•ížˆ ë§í•˜ë©´, 메시지를 사용해 ì´ë²¤íŠ¸ë¥¼ 통지하는 ë°©ì‹ìœ¼ë¡œ 설계ë˜ì–´ 있습니다. 윈ë„ìš° 메시지를 처리한다는 ê²ƒì€ ë©”ì‹œì§€ íì—ì„œ 메시지를 하나씩 꺼내서 윈ë„ìš° í”„ë¡œì‹œì €ì— ì „ì†¡í•œë‹¤ëŠ” ê²ƒì„ ì˜ë¯¸í•˜ë©°, ì´ê²ƒì€ ê·¸ í–‰ì„ ì§€ê°€ ë˜ëŠ” 윈ë„ìš°ì— ì „ì†¡ë˜ì–´ 처리ë©ë‹ˆë‹¤. EXAMPLE ````````` .. code-block:: c++ :linenos: :emphasize-lines: 5 C/C++ Long BoardID = 0; void CmlMotionDlg::OnStop() { long nAxes[4]={0, 1, 2, 3}; GetDlgItcml(IDC_btnStop)->EnableWindow(FALSE); cmlMxStop(BoardID, 4, nAxes); GetDlgItcml(IDC_btnStop)->EnableWindow(TRUE); } .. code-block:: c++ :linenos: Visual Basic Private Sub btnStop_Click() Dim nRetVal As Long Dim BoardID As Long Dim NumChannel(2) As Long BoardID = 0 NumChannel(0) = 0 NumChannel(1) = 1 ' ê° ì¸ìžì— 대한 ì„¤ëª…ì„ ë“œë¦½ë‹ˆë‹¤. ' MxStop( 축 갯수, ë°°ì—´, 완료대기여부, 블ë¡ì—¬ë¶€) ' 1. 축 갯수 ' ë‹¤ì¶•ì œì–´ì—ì„œ ë°°ì—´ ìš”ì†Œì— í•´ë‹¹í•˜ëŠ” ëŒ€ìƒ ì¶•ì˜ ê°¯ìˆ˜ìž…ë‹ˆë‹¤. ' 2. ë°°ì—´ ' 축 ë°°ì—´ì„ ì „ë‹¬í•©ë‹ˆë‹¤. ì´ ë°°ì—´ ë‚´ë¶€ì˜ ì¶•ì€ X, Y, Z, U ì¶•ì„ ê¸°ë³¸ìœ¼ë¡œ 하지만 사용ìžê°€ ì›í•˜ëŠ” ì¶•ì˜ ì¡°í•© (예 : X1, Y2, U1, Z1) ë“±ì˜ ì¡°í•©ì˜ ë°°ì—´ë¡œë„ ì „ë‹¬ í• ìˆ˜ 있습니다. ' 단 '1. 축 갯수'는 ëŒ€ìƒ ì¶•ì˜ ì´ ê°¯ìˆ˜ìž…ë‹ˆë‹¤ ' 3. 완료 대기 여부 ' MxStop í•¨ìˆ˜ì˜ ì´ ì¸ìžì˜ ê°’ì´ True ì¼ ê²½ìš° 함수는 ì •ì§€(åœæ¢) ëª…ë ¹ì„ ' 송달한 후 반환하지 않습니다. ' 만약 False ì¼ ê²½ìš° ì •ì§€(åœæ¢) 완료까지 기다리지 않습니다. ' 4. ë¸”ë¡ ì—¬ë¶€ ' ì´ ë§¤ë‰´ì–¼ì—ì„œ 설명한 ë‚´ìš©ì´ë¯€ë¡œ ìƒëžµí•©ë‹ˆë‹¤. nRetVal = MxStop(BoardID, 3, NumChannel(0)) End Sub .. code-block:: c++ :linenos: Delphi // * Description : // * ì´ í•¨ìˆ˜ëŠ” 버튼 ì´ë²¤íŠ¸ì— ì˜í•´ 모션 ë™ìž‘ì„ ì •ì§€(åœæ¢)하는 함수입니다. // * procedure btnStopClick(); var BoardID : LongInt; NumChannel : Array[0..1] of LongInt; gnTargetAxis : LongInt; begin end; BoardID := 0; NumChannel[0] := 0; NumChannel[1] := cmY1; gnTargetAxis := 2; // ì •ì§€(åœæ¢) í•¨ìˆ˜ì˜ ì›í˜•ì€ cmlSxStop(BoardID, [TargetAxis], [IsWaitComplete], // [IsBlocking]) 입니다. // TargetAxis : ì •ì§€(åœæ¢) í• ëŒ€ìƒ ì¶•ì„ ì„¤ì •í•©ë‹ˆë‹¤. cmlMxStop(BoardID, gnTargetAxis, @NumChannel);